package mac5855.app.dao;

import java.util.List;

import javax.persistence.EntityManager;
import javax.persistence.Query;

import mac5855.app.models.Pergunta;
import mac5855.app.models.Resposta;

public class JpaRespostaDAO implements RespostaDAO {

	@Override
	public void create(Resposta resposta) {

		EntityManager em;
		em = JpaDAOFactory.createConnection();
		em.getTransaction().begin();
		em.persist(resposta);
		em.getTransaction().commit();

		JpaDAOFactory.releaseConnection(em);
	}

	@Override
	public void delete(Integer id) {

		EntityManager em;
		em = JpaDAOFactory.createConnection();
		em.getTransaction().begin();
		Resposta resposta = new Resposta();
		resposta.setId(id);
		em.remove(resposta);
		em.getTransaction().commit();

		JpaDAOFactory.releaseConnection(em);
	}

	@Override
	public Resposta find(Resposta resposta) {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public Resposta[] findAll() {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public void update(Resposta transientObject) {
		// TODO Auto-generated method stub

	}

	@Override
	public Resposta findById(Integer id) {

		EntityManager em;
		em = JpaDAOFactory.createConnection();
		em.getTransaction().begin();
		Resposta resposta = em.find(Resposta.class, id);
		em.getTransaction().commit();
		JpaDAOFactory.releaseConnection(em);
		return resposta;
	}

	@Override
	public Resposta[] findByPergunta(Pergunta pergunta) {

		EntityManager em;
		em = JpaDAOFactory.createConnection();

		List<Resposta> respostas;

		Query q = em.createQuery("select p from Resposta p where (p.pergunta_id = ?)");

		q.setParameter(1, pergunta.getId());

		respostas = q.getResultList();

		JpaDAOFactory.releaseConnection(em);

		return (Resposta[]) respostas.toArray(new Resposta[respostas.size()]);
	}

	@Override
	public void vote(int id, boolean voteThrough) {

		Resposta resposta = findById(id);

		if (voteThrough) {
			resposta.setVotoPositivo(resposta.getVotoPositivo() + 1);
		} else {
			resposta.setVotoNegativo(resposta.getVotoNegativo() + 1);
		}

		EntityManager em;
		em = JpaDAOFactory.createConnection();
		em.getTransaction().begin();
		em.persist(resposta);
		em.getTransaction().commit();

		JpaDAOFactory.releaseConnection(em);
	}

}
